{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "99b19cd3-a348-4194-9bd0-dd0830b5268c",
   "metadata": {},
   "source": [
    "# Scaling EconML Using Ray \n",
    "[Ray](https://docs.ray.io/en/latest/index.html) is an open-source distributed computing framework that allows you to easily parallelize and scale your Python applications. It's designed to make it simple to write efficient, high-performance, and scalable code for various workloads, including machine learning, deep learning, data processing, and more. Ray provides a range of tools and libraries to manage distributed computing tasks, making it easier to utilize resources efficiently and speed up the execution of your code.\n",
    "\n",
    "Our library calculates the nuisance estimators using cross-fitting for robustness. By default, the cross-fit operation is computed sequentially, which is suitable for smaller datasets. However, when dealing with large datasets, sequential computation may not be efficient and can take a long time. To address this challenge of scaling Ortholearners with large datasets or increasing Folds for cross-validation, our Package seamlessly integrates with the Ray library. This integration allows for parallelization of the cross-fit operations by utilizing Ray remote functions, known as Ray tasks. With this approach, each of the K folds can be invoked remotely and asynchronously on separate Python workers.\n",
    "\n",
    "\n",
    "<div>\n",
    "    <img src=\"images/seq_cv.png\" style=\"width: 500px; height: 250px; display: block; border: 1px solid black; margin-bottom: 20px;\">\n",
    "</div>\n",
    "\n",
    "<div>\n",
    "    <img src=\"images/ray_parellel_cv.png\" style=\"width: 500; height: 250px; display: block; border: 1px solid black;\">\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbd587cb-7b6c-4882-9063-5013e8cb85cb",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "01b70101-d4ad-40fc-baa6-565795ee897a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-08-16T18:32:09.629351Z",
     "start_time": "2023-08-16T18:32:09.627091Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import ray\n",
    "import numpy as np\n",
    "import scipy\n",
    "from econml.dml import LinearDML\n",
    "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b50eba2d-c42c-4cdb-8ba4-ca5116f15064",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Ray Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8fd7865a-5542-4b95-8428-96a54f158ba2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-08-16T18:32:22.645930Z",
     "start_time": "2023-08-16T18:32:13.437840Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2023-08-17 00:02:20,082\tINFO worker.py:1621 -- Started a local Ray instance.\n",
      "2023-08-17 00:02:20,284\tINFO packaging.py:518 -- Creating a file package for local directory '/Users/vishal.verma/Projects/poc/personal/EconML-Ray/notebooks'.\n",
      "2023-08-17 00:02:20,359\tINFO packaging.py:346 -- Pushing file package 'gcs://_ray_pkg_0eadd018dd5d6e1e.zip' (8.52MiB) to Ray cluster...\n",
      "2023-08-17 00:02:20,383\tINFO packaging.py:359 -- Successfully pushed file package 'gcs://_ray_pkg_0eadd018dd5d6e1e.zip'.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7b14e01c1e6f4b5e83d6ef95ab12369d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/html": [
       "<div class=\"lm-Widget p-Widget lm-Panel p-Panel jp-Cell-outputWrapper\">\n",
       "    <div style=\"margin-left: 50px;display: flex;flex-direction: row;align-items: center\">\n",
       "        <div class=\"jp-RenderedHTMLCommon\" style=\"display: flex; flex-direction: row;\">\n",
       "  <svg viewBox=\"0 0 567 224\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 3em;\">\n",
       "    <g clip-path=\"url(#clip0_4338_178347)\">\n",
       "        <path d=\"M341.29 165.561H355.29L330.13 129.051C345.63 123.991 354.21 112.051 354.21 94.2307C354.21 71.3707 338.72 58.1807 311.88 58.1807H271V165.561H283.27V131.661H311.8C314.25 131.661 316.71 131.501 319.01 131.351L341.25 165.561H341.29ZM283.29 119.851V70.0007H311.82C331.3 70.0007 342.34 78.2907 342.34 94.5507C342.34 111.271 331.34 119.861 311.82 119.861L283.29 119.851ZM451.4 138.411L463.4 165.561H476.74L428.74 58.1807H416L367.83 165.561H380.83L392.83 138.411H451.4ZM446.19 126.601H398L422 72.1407L446.24 126.601H446.19ZM526.11 128.741L566.91 58.1807H554.35L519.99 114.181L485.17 58.1807H472.44L514.01 129.181V165.541H526.13V128.741H526.11Z\" fill=\"var(--jp-ui-font-color0)\"/>\n",
       "        <path d=\"M82.35 104.44C84.0187 97.8827 87.8248 92.0678 93.1671 87.9146C98.5094 83.7614 105.083 81.5067 111.85 81.5067C118.617 81.5067 125.191 83.7614 130.533 87.9146C135.875 92.0678 139.681 97.8827 141.35 104.44H163.75C164.476 101.562 165.622 98.8057 167.15 96.2605L127.45 56.5605C121.071 60.3522 113.526 61.6823 106.235 60.3005C98.9443 58.9187 92.4094 54.9203 87.8602 49.0574C83.3109 43.1946 81.0609 35.8714 81.5332 28.4656C82.0056 21.0599 85.1679 14.0819 90.4252 8.8446C95.6824 3.60726 102.672 0.471508 110.08 0.0272655C117.487 -0.416977 124.802 1.86091 130.647 6.4324C136.493 11.0039 140.467 17.5539 141.821 24.8501C143.175 32.1463 141.816 39.6859 138 46.0505L177.69 85.7505C182.31 82.9877 187.58 81.4995 192.962 81.4375C198.345 81.3755 203.648 82.742 208.33 85.3976C213.012 88.0532 216.907 91.9029 219.616 96.5544C222.326 101.206 223.753 106.492 223.753 111.875C223.753 117.258 222.326 122.545 219.616 127.197C216.907 131.848 213.012 135.698 208.33 138.353C203.648 141.009 198.345 142.375 192.962 142.313C187.58 142.251 182.31 140.763 177.69 138L138 177.7C141.808 184.071 143.155 191.614 141.79 198.91C140.424 206.205 136.44 212.75 130.585 217.313C124.731 221.875 117.412 224.141 110.004 223.683C102.596 223.226 95.6103 220.077 90.3621 214.828C85.1139 209.58 81.9647 202.595 81.5072 195.187C81.0497 187.779 83.3154 180.459 87.878 174.605C92.4405 168.751 98.9853 164.766 106.281 163.401C113.576 162.035 121.119 163.383 127.49 167.19L167.19 127.49C165.664 124.941 164.518 122.182 163.79 119.3H141.39C139.721 125.858 135.915 131.673 130.573 135.826C125.231 139.98 118.657 142.234 111.89 142.234C105.123 142.234 98.5494 139.98 93.2071 135.826C87.8648 131.673 84.0587 125.858 82.39 119.3H60C58.1878 126.495 53.8086 132.78 47.6863 136.971C41.5641 141.163 34.1211 142.972 26.7579 142.059C19.3947 141.146 12.6191 137.574 7.70605 132.014C2.79302 126.454 0.0813599 119.29 0.0813599 111.87C0.0813599 104.451 2.79302 97.2871 7.70605 91.7272C12.6191 86.1673 19.3947 82.5947 26.7579 81.6817C34.1211 80.7686 41.5641 82.5781 47.6863 86.7696C53.8086 90.9611 58.1878 97.2456 60 104.44H82.35ZM100.86 204.32C103.407 206.868 106.759 208.453 110.345 208.806C113.93 209.159 117.527 208.258 120.522 206.256C123.517 204.254 125.725 201.276 126.771 197.828C127.816 194.38 127.633 190.677 126.253 187.349C124.874 184.021 122.383 181.274 119.205 179.577C116.027 177.88 112.359 177.337 108.826 178.042C105.293 178.746 102.113 180.654 99.8291 183.44C97.5451 186.226 96.2979 189.718 96.3 193.32C96.2985 195.364 96.7006 197.388 97.4831 199.275C98.2656 201.163 99.4132 202.877 100.86 204.32ZM204.32 122.88C206.868 120.333 208.453 116.981 208.806 113.396C209.159 109.811 208.258 106.214 206.256 103.219C204.254 100.223 201.275 98.0151 197.827 96.97C194.38 95.9249 190.676 96.1077 187.348 97.4873C184.02 98.8669 181.274 101.358 179.577 104.536C177.879 107.714 177.337 111.382 178.041 114.915C178.746 118.448 180.653 121.627 183.439 123.911C186.226 126.195 189.717 127.443 193.32 127.44C195.364 127.443 197.388 127.042 199.275 126.259C201.163 125.476 202.878 124.328 204.32 122.88ZM122.88 19.4205C120.333 16.8729 116.981 15.2876 113.395 14.9347C109.81 14.5817 106.213 15.483 103.218 17.4849C100.223 19.4868 98.0146 22.4654 96.9696 25.9131C95.9245 29.3608 96.1073 33.0642 97.4869 36.3922C98.8665 39.7202 101.358 42.4668 104.535 44.1639C107.713 45.861 111.381 46.4036 114.914 45.6992C118.447 44.9949 121.627 43.0871 123.911 40.301C126.195 37.515 127.442 34.0231 127.44 30.4205C127.44 28.3772 127.038 26.3539 126.255 24.4664C125.473 22.5788 124.326 20.8642 122.88 19.4205ZM19.42 100.86C16.8725 103.408 15.2872 106.76 14.9342 110.345C14.5813 113.93 15.4826 117.527 17.4844 120.522C19.4863 123.518 22.4649 125.726 25.9127 126.771C29.3604 127.816 33.0638 127.633 36.3918 126.254C39.7198 124.874 42.4664 122.383 44.1635 119.205C45.8606 116.027 46.4032 112.359 45.6988 108.826C44.9944 105.293 43.0866 102.114 40.3006 99.8296C37.5145 97.5455 34.0227 96.2983 30.42 96.3005C26.2938 96.3018 22.337 97.9421 19.42 100.86ZM100.86 100.86C98.3125 103.408 96.7272 106.76 96.3742 110.345C96.0213 113.93 96.9226 117.527 98.9244 120.522C100.926 123.518 103.905 125.726 107.353 126.771C110.8 127.816 114.504 127.633 117.832 126.254C121.16 124.874 123.906 122.383 125.604 119.205C127.301 116.027 127.843 112.359 127.139 108.826C126.434 105.293 124.527 102.114 121.741 99.8296C118.955 97.5455 115.463 96.2983 111.86 96.3005C109.817 96.299 107.793 96.701 105.905 97.4835C104.018 98.2661 102.303 99.4136 100.86 100.86Z\" fill=\"#00AEEF\"/>\n",
       "    </g>\n",
       "    <defs>\n",
       "        <clipPath id=\"clip0_4338_178347\">\n",
       "            <rect width=\"566.93\" height=\"223.75\" fill=\"white\"/>\n",
       "        </clipPath>\n",
       "    </defs>\n",
       "  </svg>\n",
       "</div>\n",
       "\n",
       "        <table class=\"jp-RenderedHTMLCommon\" style=\"border-collapse: collapse;color: var(--jp-ui-font-color1);font-size: var(--jp-ui-font-size1);\">\n",
       "    <tr>\n",
       "        <td style=\"text-align: left\"><b>Python version:</b></td>\n",
       "        <td style=\"text-align: left\"><b>3.9.12</b></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "        <td style=\"text-align: left\"><b>Ray version:</b></td>\n",
       "        <td style=\"text-align: left\"><b>2.6.2</b></td>\n",
       "    </tr>\n",
       "    \n",
       "</table>\n",
       "\n",
       "    </div>\n",
       "</div>\n"
      ],
      "text/plain": [
       "RayContext(dashboard_url='', python_version='3.9.12', ray_version='2.6.2', ray_commit='92ad4bab9e93c7a207a44c65ab51295f92566cb4', protocol_version=None)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Initialize Ray\n",
    "ray.init()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc26ab23-65a6-4a0f-ac3c-440ac1456a32",
   "metadata": {},
   "source": [
    "## Synthetic Data\n",
    "To demonstrate scaling using ray we will generate a synthetic dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "12402243-a5ee-45f9-863f-2c48a2f42690",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(123)\n",
    "n = 5000\n",
    "X = np.random.normal(size=(n, 5))\n",
    "T = np.random.binomial(1, scipy.special.expit(X[:, 0]))\n",
    "y = (1 + .5*X[:, 0]) * T + X[:, 0] + np.random.normal(size=(n,))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0715b81d-cf01-4dac-b540-1bd9be925e7f",
   "metadata": {},
   "source": [
    "## Using the SDK\n",
    "In the econml package, function `_crossfit`  is implemented in the `_OrthoLearner` class, and any estimator having baseclass as `_OrthoLearner` has option to use the parallel computation using Ray which can be used in following way .\n",
    "\n",
    "1. Set the flag use_ray to True:\n",
    "    * All the estimators having base class as `_OrthoLearner` takes an argument `use_ray` , which is set to `False` by default and can be set to `True` in order to leverage the Ray's parallel processing\n",
    "2. Pass Ray Remote function options:\n",
    "    * To optimize the performance of the Ray Remote task , argument `ray_remote_func_options` which taked input in form of dict (default {}) , can be passed to esitmator. (https://docs.ray.io/en/latest/ray-core/api/doc/ray.remote.html)\n",
    "\n",
    "    \n",
    "We will be using DML estimator for our demonstration in this notebook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ea04b68d-1911-48c7-9367-2d899f699347",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.45315363, 1.6549579 , 0.91669949, ..., 1.16562133, 0.16146495,\n",
       "       0.95911527])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "ray_opts = {'num_cpus':2,'scheduling_strategy':'SPREAD'}\n",
    "\n",
    "est = LinearDML(\n",
    "    model_y=RandomForestRegressor(random_state=0),\n",
    "    model_t=RandomForestClassifier(random_state=0),\n",
    "    discrete_treatment=True,\n",
    "    use_ray=True, #setting use_ray flag to True to use ray.\n",
    "    ray_remote_func_options=ray_opts,\n",
    "    cv=2, #Determines the cross-validation splitting strategy\n",
    "    mc_iters=2 # The number of times to rerun the first stage models to reduce the variance of the nuisances.\n",
    "               # Note: When use_ray=True will also parallelize the iteration depending upon the ray cluster config.\n",
    ")\n",
    "\n",
    "est.fit(y, T, X=X, W=None)\n",
    "est.effect(X)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af19a53f-9836-4b03-871f-b0ce5fac9815",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Performance Comparison \n",
    "We will compare the runtime of DML esitmator varying with different values of CV , to see the how using ray can significantly speed up the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "43960663-e24b-4704-8b34-b9802888ecc2",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "def compare_runtime(cv_values, use_ray=True):\n",
    "    runtimes = []\n",
    "    for cv in cv_values:\n",
    "        ray_opts = {'num_cpus': 2, 'scheduling_strategy': 'SPREAD'} if use_ray else None\n",
    "        est = LinearDML(model_y=RandomForestRegressor(random_state=0),\n",
    "                        model_t=RandomForestClassifier(random_state=0),\n",
    "                        discrete_treatment=True,\n",
    "                        use_ray=use_ray,\n",
    "                        ray_remote_func_options=ray_opts,\n",
    "                        cv=cv,\n",
    "                        mc_iters=1)\n",
    "\n",
    "        start_time = time.time()\n",
    "        est.fit(y, T, X=X, W=None)\n",
    "        runtime = time.time() - start_time\n",
    "        runtimes.append(runtime)\n",
    "    return runtimes\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "42bc7de3-a7af-4112-afa0-707ee1fb3759",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "cv_values = [2,4, 8, 10]\n",
    "runtime_ray = compare_runtime(cv_values, use_ray=True)\n",
    "runtime_without_ray = compare_runtime(cv_values, use_ray=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "83b03341-7645-41eb-ad5e-066692c0a877",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABM0AAAHWCAYAAABkA34HAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACQ1UlEQVR4nOzdeXxU5dn/8e9kkpnsCQlZ2AIBAgkBFVERUVEEEVlFwbXi9lBbxUfRWunPXYta6/a0LrUqtFjrDrKoiAiiiBZxKRJ2giBLwpadTJKZ8/vjTObMJCxJSJgsn/frxQty7smZa5Kw5Mt13bfNMAxDAAAAAAAAAHxCgl0AAAAAAAAA0NwQmgEAAAAAAAA1EJoBAAAAAAAANRCaAQAAAAAAADUQmgEAAAAAAAA1EJoBAAAAAAAANRCaAQAAAAAAADUQmgEAAAAAAAA1EJoBAAAAAAAANRCaAQDQAtlsNj344IPBLgN+li1bJpvNpmXLlgW7lMMqKSnRTTfdpNTUVNlsNt1+++3BLqmWw31dr1q1SmeddZaioqJks9n0ww8/SJI+/vhjnXLKKQoPD5fNZlNBQcEJrxembt266brrrgt2GQAANDpCMwAAjmDWrFmy2Wy+H6GhoerUqZOuu+467dy5s8mf/8MPP2xxwdiyZcs0YcIEpaamyuFwKDk5WWPGjNH7778f7NLavBkzZmjWrFn6zW9+o9mzZ+tXv/pVkz5ft27dfL93QkJCFB8fr379+mnKlCn65ptv6nSPyspKTZw4UQcOHNAzzzyj2bNnq2vXrtq/f78mTZqkiIgIPf/885o9e7aioqKa9PU01K5du/Tggw/6wr5gevrpp2Wz2fTpp58e8TF///vfZbPZNG/evBNYGQAAzZPNMAwj2EUAANAczZo1S9dff70efvhhpaenq7y8XF9//bVmzZqlbt266aefflJ4eHiTPf+tt96q559/Xof7q7q8vFyhoaEKDQ1tsuevrwceeEAPP/ywMjIydOWVV/rCjQ8//FDLli3Tv/71L1111VXBLrPJeDweVVRUyOFwKCSk+f2/5JlnnqnQ0FB9+eWXJ+T5unXrpnbt2unOO++UJBUXF2vdunV65513tGfPHt1xxx16+umnA96n5tf1+vXrlZWVpb///e+66aabfI/7+OOPNXLkSC1evFjDhg07Ia+nob799ludfvrpmjlzZtC7sXbt2qUuXbpo8uTJeu211w77mPPPP19r1qzR7t27FRYWVqf7duvWTeedd55mzZrViNUCABB8zedf2gAANFMjR47UaaedJkm66aab1L59ez3xxBOaN2+eJk2aFJSamjKsa4h3331XDz/8sC677DK98cYbAd9s/+53v9OiRYtUWVkZxAqbTnl5uS8oa26fF3/5+fnq06dPo92vqqpKHo9HDofjiI/p1KmTrrnmmoBrTzzxhK666io988wzysjI0G9+8xvfWs2PX35+viQpPj6+TtePR2lpabPtVmssHTt21Pnnn6/3339fL774opxOZ8D6zp07tXz5ck2ZMqXOgRkAAK1Z8/tvUAAAmrlzzjlHkrRlyxbftfPOO0/nnXdercded9116tatm+/tbdu2yWaz6c9//rNefvll9ejRQ06nU6effrpWrVoV8H7PP/+8JAWMiFaruffTgw8+KJvNpo0bN+qaa65RXFyckpKSdN9998kwDO3YsUPjxo1TbGysUlNT9dRTT9Wq1eVy6YEHHlDPnj3ldDrVpUsX3X333XK5XMf8mNx3331KSEjQa6+9dthvtkeMGKHRo0f73s7Pz9eNN96olJQUhYeH6+STT9Y//vGPgPfx/1g9//zz6t69uyIjI3XhhRdqx44dMgxDjzzyiDp37qyIiAiNGzdOBw4cCLhHt27dNHr0aH3yySe+/a/69OlTa1z0wIEDuuuuu9SvXz9FR0crNjZWI0eO1I8//hjwuOp9y958803de++96tSpkyIjI1VUVHTYPc02bdqkSy+9VKmpqQoPD1fnzp11xRVXqLCw0PeYqqoqPfLII76vhW7duukPf/hDrY979Wv58ssvdcYZZyg8PFzdu3fXP//5z6N+bqrrys3N1cKFC31fS9u2bWvQ5+LZZ5/11ZqTk3PU5z6ciIgIzZ49WwkJCfrjH/8Y0Enp/3V93XXXaciQIZKkiRMnymaz+X6fTZ48WZJ0+umny2azBXRwffPNN7rooosUFxenyMhIDRkyRCtWrAioofr3S05Ojq666iq1a9dOZ599tm/99ddf14ABAxQREaGEhARdccUV2rFjR8A9zjvvPPXt21c5OTk6//zzFRkZqU6dOulPf/pTwMf+9NNPlyRdf/31vo/9sTqydu7cqRtvvFEdO3aU0+lUenq6fvOb36iiokLffvutbDZbrc+RJC1atEg2m00LFiw44r2vueYaFRYWauHChbXW3nzzTXk8Hl199dWSpD//+c8666yzlJiYqIiICA0YMEDvvvvuUWuXrI9vTdUj79Vfe9U++ugjnXPOOYqKilJMTIxGjRqltWvXBjxmz549uv7669W5c2c5nU516NBB48aNq3UvAAAaE51mAADUU/U3ae3atWvwPd544w0VFxfr17/+tWw2m/70pz9pwoQJ2rp1q8LCwvTrX/9au3bt0uLFizV79uw63/fyyy9XVlaWHn/8cS1cuFCPPvqoEhIS9Le//U1Dhw7VE088oX/961+66667dPrpp+vcc8+VZI4Wjh07Vl9++aWmTJmirKwsrVmzRs8884w2btyouXPnHvE5N23apPXr1+uGG25QTEzMMWs8dOiQzjvvPG3evFm33nqr0tPT9c477+i6665TQUGB/vd//zfg8f/6179UUVGhqVOn6sCBA/rTn/6kSZMmaejQoVq2bJl+//vfa/PmzfrLX/6iu+66q9bY2aZNm3T55Zfr5ptv1uTJkzVz5kxNnDhRH3/8sYYPHy5J2rp1q+bOnauJEycqPT1deXl5+tvf/qYhQ4YoJydHHTt2DLjnI488IofDobvuuksul+uw3VYVFRUaMWKEXC6Xpk6dqtTUVO3cuVMLFixQQUGB4uLiJJndi//4xz902WWX6c4779Q333yjxx57TOvWrdOcOXMC7rl582ZddtlluvHGG30jdtddd50GDBig7Ozsw368s7KyNHv2bN1xxx3q3Lmzb1wyKSmp3p+LmTNnqry8XFOmTJHT6VRCQsKxPt2HFR0drUsuuUSvvvqqcnJyDlv7r3/9a3Xq1EkzZszQbbfdptNPP10pKSmSpN69e+vll1/2jU736NFDkvTZZ59p5MiRGjBggB544AGFhIRo5syZGjp0qL744gudccYZAc8xceJEZWRkaMaMGb7w7o9//KPuu+8+TZo0STfddJP27t2rv/zlLzr33HP1/fffB3S3HTx4UBdddJEmTJigSZMm6d1339Xvf/979evXTyNHjlRWVpYefvhh3X///ZoyZYovcD/rrLOO+LHZtWuXzjjjDBUUFGjKlCnKzMzUzp079e6776qsrEynnXaaunfvrrffftsXHlZ766231K5dO40YMeKI958wYYJ+85vf6I033tCECRMC1t544w117dpVgwcP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QSEhIbr99ttrdSdJOmaXWbWnnnpK1113nT744AN98sknuu222/TYY4/p66+/DuhUrGsI0VRfN3VV19ddFz/99JMk1QoMG6r68/Tkk0/qlFNOOexjqn+/Vqv5ejwej2w2mz766KPDfqxrvn8wPx+XX365/vjHP2rfvn2KiYnRvHnzdOWVVwZ0Xx5JWFiYJk2apL///e/Ky8vT9u3btWnTpoBDDL744guNHTtW5557rl544QV16NBBYWFhmjlzpq8r7UiO9PVc88/D6s/Z7NmzDxt++b+W22+/XWPGjNHcuXO1aNEi3XfffXrsscf02WefqX///sd8zQAANAShGQAA9WC32/XYY4/p/PPP11//+lfdc889kszuksONZNXs1KmPxurmqIsePXroxx9/1AUXXFDv5+3Vq5d69+6tDz74QM8991ytYKGmrl276r///a88Hk9Ah9P69et9641p8+bNMgwj4HVt3LhRknwbiL/77rs6//zz9eqrrwa8b0FBQa0uvfrq16+f+vXrp3vvvVdfffWVBg8erJdeekmPPvqounbtKo/Ho02bNvm6uyQpLy9PBQUFjf6xqOlEfy6qlZSUaM6cOerSpUvA6z4e1YcBxMbGatiwYQ2+h2EYSk9P93UjHq/6/H5KSkpSbGysL1A8mssvv1wPPfSQ3nvvPaWkpKioqEhXXHFFnZ/r6quv1ksvvaS33npLubm5stlsAWO67733nsLDw7Vo0aKAztqZM2ce897V3XwFBQUBByfU/POw+nOWnJxcp89Zjx49dOedd+rOO+/Upk2bdMopp+ipp57S66+/fsz3BQCgIdjTDACAejrvvPN0xhln6Nlnn1V5ebkk85u59evXa+/evb7H/fjjj1qxYkWDnycqKkqS+Y1nU5s0aZJ27typv//977XWDh06pNLS0qO+/0MPPaT9+/frpptuUlVVVa31Tz75RAsWLJAkXXzxxdqzZ4/eeust33pVVZX+8pe/KDo6WkOGDDnOVxNo165dAadQFhUV6Z///KdOOeUUX3eL3W6v1R30zjvv1NofrT6KiopqfSz69eunkJAQ36jbxRdfLEl69tlnAx5X3fHXWCcUHsmJ/lxI5tfTr371Kx04cED/7//9v0YLhwcMGKAePXroz3/+s2/005//780jmTBhgux2ux566KFaXw+GYQSMNNdVfX4fh4SEaPz48Zo/f76+/fbbWuv+NWVlZalfv35666239NZbb6lDhw6+03DrYvDgwerWrZtef/11vfXWWxoyZEhA96PdbpfNZgvoDtu2bdtRT9KtVh2GLV++3HettLRU//jHPwIeN2LECMXGxmrGjBmqrKysdZ/qz1lZWZnvz1r/54iJiQkYGwUAoLHRaQYAQAP87ne/08SJEzVr1izdfPPNuuGGG/T0009rxIgRuvHGG5Wfn6+XXnpJ2dnZvo3y62vAgAGSpNtuu00jRoyQ3W6vVydJffzqV7/S22+/rZtvvllLly7V4MGD5Xa7tX79er399ttatGjRYTcmr3b55ZdrzZo1+uMf/6jvv/9eV155pbp27ar9+/fr448/1pIlS3wjXVOmTNHf/vY3XXfddVq9erW6deumd999VytWrNCzzz7baHtcVevVq5duvPFGrVq1SikpKXrttdeUl5cX0DEzevRoPfzww7r++ut11llnac2aNfrXv/6l7t27N/h5P/vsM916662aOHGievXqpaqqKs2ePVt2u12XXnqpJHNvqsmTJ+vll19WQUGBhgwZov/85z/6xz/+ofHjx+v8888/7td/NE39udi5c6evC6ikpEQ5OTl65513tGfPHt1555369a9/3RgvQ5IZOL3yyisaOXKksrOzdf3116tTp07auXOnli5dqtjYWM2fP/+o9+jRo4ceffRRTZ8+Xdu2bdP48eMVExOj3NxczZkzR1OmTNFdd91Vr7p69Oih+Ph4vfTSS4qJiVFUVJQGDhx4xP3hZsyYoU8++URDhgzRlClTlJWVpd27d+udd97Rl19+GdC5dfnll+v+++9XeHi4brzxxlp70x2NzWbTVVddpRkzZkiSHn744YD1UaNG6emnn9ZFF12kq666Svn5+Xr++efVs2fPY+7ZduGFFyotLU033nijfve738lut+u1115TUlKStm/f7ntcbGysXnzxRf3qV7/SqaeeqiuuuML3mIULF2rw4MH661//qo0bN+qCCy7QpEmT1KdPH4WGhmrOnDnKy8trsj8TAQCQdIRz7AEAgDFz5kxDkrFq1apaa2632+jRo4fRo0cPo6qqyjAMw3j99deN7t27Gw6HwzjllFOMRYsWGZMnTza6du3qe7/c3FxDkvHkk0/Wuqck44EHHvC9XVVVZUydOtVISkoybDab4f/Xds3HPvDAA4Yk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UlRUlAYOHKhly5bV6XlnzZql+Ph4zZs3T3369JHT6dT27du1atUqDR8+XO3bt1dcXJyGDBmi7777zvd+N9xwg0aPHh1wr8rKSiUnJ+vVV1+t8+uuKT4+Xqmpqb4fCQkJ2r9/v6688kp16tRJkZGR6tevn/79738f9T4vvPCCMjIyFB4erpSUFF122WW+NY/Ho8cee0zp6emKiIjQySefrHfffbfBNQMAAAAAWpDKcmn9Qum9m6Qne0pvXSOtfd8MzOLTpMH/K01ZJt32gzTsQanDSQRmrQidZv4qy6QZHYPz3H/YJTmijvs27733np555hm9+eabys7O1p49e/Tjjz/61m+99Vbl5OTozTffVMeOHTVnzhxddNFFWrNmjTIyjn1iR1lZmZ544gm98sorSkxMVHJysrZu3arJkyfrL3/5iwzD0FNPPaWLL75YmzZtUkxMjG666Sade+652r17tzp06CBJWrBggcrKynT55ZdLkmbMmKEZM2Yc9blzcnKUlpZ21MeUl5drwIAB+v3vf6/Y2FgtXLhQv/rVr9SjRw+dccYZtR7/7bff6rbbbtPs2bN11lln6cCBA/riiy9864899phef/11vfTSS8rIyNDy5ct1zTXXKCkpSUOGDDnmxwsAAAAA0MJUuaQtS81wbP2HUkWxtRbb2TzxMnuC1OlUArJWjtCsldm+fbtSU1M1bNgwhYWFKS0tzRcWbd++XTNnztT27dvVsaMZDt511136+OOPNXPmzGOGVpLZIfbCCy/o5JNP9l0bOnRowGNefvllxcfH6/PPP9fo0aN11llnqXfv3po9e7buvvtuSeZo5cSJExUdHS1JuvnmmzVp0qSjPnd1zdWuvPJK2e1239uvv/66xo8fr7vuust3berUqVq0aJHefvvtw4Zm27dvV1RUlEaPHq2YmBh17dpV/fv3l2R25c2YMUOffvqpBg0aJEnq3r27vvzyS/3tb38jNAMAAACA1qKqQtq6zNyjbP1CyVVorcV09I5eXiJ1GiAFaYsinHiEZv7CIs2Or2A9dyOYOHGinn32WXXv3l0XXXSRLr74Yo0ZM0ahoaFas2aN3G63evXqFfA+LpdLiYmJdbq/w+HQSSedFHAtLy9P9957r5YtW6b8/Hy53W6VlZVp+/btvsfcdNNNevnll3X33XcrLy9PH330kT777DPfekJCghIS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",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15, 5))\n",
    "plt.plot(cv_values, runtime_ray, label='use_ray=True')\n",
    "plt.plot(cv_values, runtime_without_ray, label='use_ray=False')\n",
    "plt.xlabel('cv')\n",
    "plt.ylabel('Runtime (seconds)')\n",
    "plt.title('Runtime Comparison for Different cv Values')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
